package com.sugon.dao;

import com.sugon.entity.SysDeptEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Map;

/**
 * 部门管理
 *
 * @author YuXD
 * @date 2022-07-19
 */
@Mapper
public interface SysDeptDao extends BaseDao<SysDeptEntity> {

    /**
     * 根据部门名称查询部门列表
     *
     * @param name
     * @return
     */
    @Select("SELECT * FROM sys_dept WHERE name = #{name}")
    List<SysDeptEntity> queryByName(@Param("name") String name);

    /**
     * 罗列出所有指定部门级别以下的设备组织列表
     *
     * @param whereSql 查询sql
     * @return
     */
    List<SysDeptEntity> listDeviceOrganization(@Param("whereSql") String whereSql);

    /**
     * 查询子部门ID列表
     *
     * @param parentId 上级部门ID
     */
    List<String> queryDetpIdList(String parentId);

    /**
     * 根据部门ID查询对应的部门
     *
     * @param deptId
     * @return
     */
    @Select("SELECT * FROM SYS_DEPT WHERE DEPT_ID = #{deptId}")
    SysDeptEntity queryByDeptId(@Param("deptId") String deptId);

    /**
     * 根据parent_id查询部门列表
     *
     * @param parentId 上级部门ID
     */
    @Select("select * from sys_dept where parent_id = #{parentId} and status = 0")
    List<SysDeptEntity> queryByParentId(@Param("parentId") String parentId);

    /**
     * 查询当前父部门下的子部门最大部门ID是多少
     *
     * @param parentId
     * @return
     */
    String queryMaxIdByParentId(@Param("parentId") String parentId, @Param("deptLevel") Integer deptLevel);

    /**
     * getDeptTypes
     *
     * @param type
     * @return
     */
    List<String> getDeptTypes(String type);

    /**
     * 获取铸造车间列表
     *
     * @param cjId        车间ID
     * @return
     */
    List<SysDeptEntity> getZZCJ(@Param("cjId") String cjId);

    /**
     * 获取指定部门level的部门列表
     *
     * @param deptLevel
     * @return
     */
    @Select("select * from sys_dept where dept_level = #{deptLevel} and status = 0")
    List<SysDeptEntity> listByDeptLevel(@Param("deptLevel") Integer deptLevel);

    /**
     * 其中 deptType 为必输项
     *
     * @param map
     * @return
     */
    List<SysDeptEntity> queryListByType(Map<String, Object> map);

    /**
     * queryListByType2
     *
     * @param map
     * @return
     */
    List<SysDeptEntity> queryListByType2(Map<String, Object> map);

    /**
     * getDeptTypeById
     *
     * @param deptId
     * @return
     */
    String getDeptTypeById(@Param("deptId") String deptId);

    /**
     * getPEdept
     *
     * @param deptType
     * @return
     */
    String getPEdept(@Param("deptType") String deptType);

    /**
     * 获取生产线
     *
     * @return
     */
    List<SysDeptEntity> loadSCX();

    /**
     * 获取通用型数据
     * 主要是工厂+产线的
     *
     * @return
     */
    List<SysDeptEntity> queryListByTY();

    /**
     * 查询出符合条件的人员组织树
     *
     * @param map
     * @return
     */
    List<SysDeptEntity> queryListByRY(Map<String, Object> map);

    /**
     * 获取设备产线数据
     *
     * @return
     */
    List<SysDeptEntity> queryListBySB();

    /**
     * 获取设备产线组织数据，level必须小于等于level
     *
     * @return
     */
    List<SysDeptEntity> queryListLTLevel(@Param("level") Integer level);

    /**
     * 根据设备组织DCODE，获取所有直接子部门的DCODE列表 by yu
     *
     * @param parentDeptId 直接上级部门ID
     * @return
     */
    List<String> getSubDeptDCode(@Param("parentDeptId") String parentDeptId);

    /**
     * 根据组织编码获取对应的组织列表
     * 一般来说dcode是唯一的，但为了以防万一，所以返回列表
     *
     * @param dcode 组织结构编码
     * @return
     */
    @Select("SELECT * FROM sys_dept WHERE dcode = #{dcode}")
    List<SysDeptEntity> queryByDCode(@Param("dcode") String dcode);
}
